﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Input;
using WpfApplication2.Helpers;
using System.Windows.Controls;
using System.Collections.ObjectModel;
using WpfApplication2.SindicatoWebService;
using System.Windows;
using WpfApplication2.UserControls;
using System.Globalization;
using WpfApplication2.Validation;
using System.Reflection;
using System.ComponentModel;
using WpfApplication2.Views;
using WpfApplication2.Views.Nomenclador;

namespace WpfApplication2.ViewModels.Nomenclador
{
    class EditarNomencladorViewModel: ViewModel

    {
        public List<PropertyElement> ListaEltoNull { get; set; }
        public Service1SoapClient WS;
        public NomencladorDTO Nomenclador1 { get; set; }
        public NomencladorDTO Nomenclador
        {
            get
            {
                return nomenclador;
            }
            set
            {
                if (nomenclador != value)
                {
                    nomenclador = value;
                    RaisePropertyChanged("Nomenclador");
                }
            }
        }
        //  public NomencladorDTO NomenAux;
        #region properties
        

        public NomencladorDTO NomenAux
        {
            get
            {
                return nomenAux;
            }
            set
            {
                if (nomenAux != value)
                {
                    nomenAux = value;
                    RaisePropertyChanged("NomenAux");
                }
            }
        }
        private NomencladorDTO nomenAux;

        public Instancias Instancias { get; set; }


        public string CodigoNom
        {
            get
            {
                return codigoNom;
            }
            set
            {
                if (codigoNom != value)
                {
                    codigoNom = value;
                    RaisePropertyChanged("CodigoNom");
                }
            }
        }
        private string codigoNom;



        public PropertyElement CodigoNomP
        {
            get
            {
                return codigoNomP;
            }
            set
            {
                if (codigoNomP != value)
                {
                    codigoNomP = value;
                    RaisePropertyChanged("CodigoNomP");
                }
            }
        }
        private PropertyElement codigoNomP;

       
        public PropertyElement Idnomen
        {
            get
            {
                return idnomen;
            }
            set
            {
                if (idnomen != value)
                {
                    idnomen = value;
                    RaisePropertyChanged("Idnomen");
                }
            }
        }
        private PropertyElement idnomen;
        public PropertyElement Descripcion
        {
            get
            {
                return descripcion;
            }
            set
            {
                if (descripcion != value)
                {
                    descripcion = value;
                    RaisePropertyChanged("Descripcion");
                }
            }
        }
        private PropertyElement descripcion;

        public String Color1
        {
            get
            {
                return color1;
            }
            set
            {
                if (color1 != value)
                {
                    color1 = value;
                    RaisePropertyChanged("Color1");
                }
            }
        }
        private String color1;
        public String Color2
        {
            get
            {
                return color2;
            }
            set
            {
                if (color2 != value)
                {
                    color2 = value;
                    RaisePropertyChanged("Color2");
                }
            }
        }
        private String color2;
        public String Color3
        {
            get
            {
                return color3;
            }
            set
            {
                if (color3 != value)
                {
                    color3 = value;
                    RaisePropertyChanged("Color3");
                }
            }
        }
        private String color3;
        public String Color4
        {
            get
            {
                return color4;
            }
            set
            {
                if (color4 != value)
                {
                    color4 = value;
                    RaisePropertyChanged("Color4");
                }
            }
        }
        private String color4;
        public String Color5
        {
            get
            {
                return color5;
            }
            set
            {
                if (color5 != value)
                {
                    color5 = value;
                    RaisePropertyChanged("Color5");
                }
            }
        }
        private String color5;
        public String Color6
        {
            get
            {
                return color6;
            }
            set
            {
                if (color6 != value)
                {
                    color6 = value;
                    RaisePropertyChanged("Color6");
                }
            }
        }
        private String color6;
        public String Color7
        {
            get
            {
                return color7;
            }
            set
            {
                if (color7 != value)
                {
                    color7 = value;
                    RaisePropertyChanged("Color7");
                }
            }
        }
        private String color7;
        public String Color8
        {
            get
            {
                return color8;
            }
            set
            {
                if (color8 != value)
                {
                    color8 = value;
                    RaisePropertyChanged("Color8");
                }
            }
        }
        private String color8;
        public String Color9
        {
            get
            {
                return color9;
            }
            set
            {
                if (color9 != value)
                {
                    color9 = value;
                    RaisePropertyChanged("Color9");
                }
            }
        }
        private String color9;
        public String Color10
        {
            get
            {
                return color10;
            }
            set
            {
                if (color10 != value)
                {
                    color10 = value;
                    RaisePropertyChanged("Color10");
                }
            }
        }
        private String color10;
        public String Color11
        {
            get
            {
                return color11;
            }
            set
            {
                if (color11 != value)
                {
                    color11 = value;
                    RaisePropertyChanged("Color11");
                }
            }
        }
        private String color11;

        public PropertyElement Letra
        {
            get
            {
                return letra;
            }
            set
            {
                if (letra != value)
                {
                    letra = value;
                    RaisePropertyChanged("Letra");
                }
            }
        }
        private PropertyElement letra;
        public PropertyElement Galeno
        {
            get
            {
                return galeno;
            }
            set
            {
                if (galeno != value)
                {
                    galeno = value;
                    RaisePropertyChanged("Galeno");
                }
            }
        }
        private PropertyElement galeno;
        public PropertyElement Especialista
        {
            get
            {
                return especialista;
            }
            set
            {
                if (especialista != value)
                {
                    especialista = value;
                    RaisePropertyChanged("Especialista");
                }
            }
        }
        private PropertyElement especialista;
        public PropertyElement Ayudante1
        {
            get
            {
                return ayudante1;
            }
            set
            {
                if (ayudante1 != value)
                {
                    ayudante1 = value;
                    RaisePropertyChanged("Ayudante1");
                }
            }
        }
        private PropertyElement ayudante1;
        public PropertyElement Ayudante2
        {
            get
            {
                return ayudante2;
            }
            set
            {
                if (ayudante2 != value)
                {
                    ayudante2 = value;
                    RaisePropertyChanged("Ayudante2");
                }
            }
        }
        private PropertyElement ayudante2;
        public PropertyElement Ayudante3
        {
            get
            {
                return ayudante3;
            }
            set
            {
                if (ayudante3 != value)
                {
                    ayudante3 = value;
                    RaisePropertyChanged("Ayudante3");
                }
            }
        }
        private PropertyElement ayudante3;
        public PropertyElement Anestesista
        {
            get
            {
                return anestesista;
            }
            set
            {
                if (anestesista != value)
                {
                    anestesista = value;
                    RaisePropertyChanged("Anestesista");
                }
            }
        }
        private PropertyElement anestesista;
        public PropertyElement Gastos
        {
            get
            {
                return gastos;
            }
            set
            {
                if (gastos != value)
                {
                    gastos = value;
                    RaisePropertyChanged("Gastos");
                }
            }
        }
        private PropertyElement gastos;
        public PropertyElement CodAnterior
        {
            get
            {
                return codAnterior;
            }
            set
            {
                if (codAnterior != value)
                {
                    codAnterior = value;
                    RaisePropertyChanged("CodAnterior");
                }
            }
        }
        private PropertyElement codAnterior;

        public NomencladorDTO[] Resultados
        {
            get
            {
                return resultados;
            }
            set
            {
                if (resultados != value)
                {
                    resultados = value;
                    RaisePropertyChanged("Resultados");
                }
            }
        }

        private NomencladorDTO[] resultados;

        

        private NomencladorDTO nomenclador;

        public Visibility ResultsVisibility
        {
            get
            {
                return resultsVisibility;
            }
            set
            {
                if (resultsVisibility != value)
                {
                    resultsVisibility = value;
                    RaisePropertyChanged("ResultsVisibility");
                }
            }
        }
        private Visibility resultsVisibility;

        public Visibility ResultsListVisibility
        {
            get
            {
                return resultsListVisibility;
            }
            set
            {
                if (resultsListVisibility != value)
                {
                    resultsListVisibility = value;
                    RaisePropertyChanged("ResultsListVisibility");
                }
            }
        }
        private Visibility resultsListVisibility;

        public Visibility NoResultsVisibility
        {
            get
            {
                return noResultsVisibility;
            }
            set
            {
                if (noResultsVisibility != value)
                {
                    noResultsVisibility = value;
                    RaisePropertyChanged("NoResultsVisibility");
                }
            }
        }
        private Visibility noResultsVisibility;

        public List<String> Colores; 


        #endregion
        
        public EditarNomencladorViewModel(Instancias instancias,  NomencladorDTO NomenIngre)
        {
            WS = new Service1SoapClient();
            Instancias = instancias;
            Nomenclador1 = NomenIngre;
            InicializarPropiedades();
            
        }

        private void InicializarPropiedades()
        {

            //Inicializacion de propiedades:
            //Idnomen = new PropertyElement() { Foreground = "Black", Name = "IdNomenclador", Value = Convert.ToString(Nomenclador.IdNomenclador)};
            CodigoNomP = new PropertyElement() { Foreground = "Black", Name = "CodigoNomP", Value= Nomenclador1.CodigoNom };
            Descripcion = new PropertyElement() { Foreground = "Black", Name = "Descripcion", Value = Nomenclador1.Descripcion};
            Letra = new PropertyElement() { Foreground = "Black", Name = "Letra", Value = Nomenclador1.Letra};
            Galeno = new PropertyElement() { Foreground = "Black", Name = "Galeno", Value = Nomenclador1.Galeno};
            Especialista = new PropertyElement() { Foreground = "Black", Name = "Especialista" , Value = Nomenclador1.Especialista};
            Ayudante1 = new PropertyElement() { Foreground = "Black", Name = "Ayudante1" , Value= Nomenclador1.Ayudante1};
            Ayudante2 = new PropertyElement() { Foreground = "Black", Name = "Ayudante2" , Value = Nomenclador1.Ayudante2};
            Ayudante3 = new PropertyElement() { Foreground = "Black", Name = "Ayudante3", Value = Nomenclador1.Ayudante2 };
            Anestesista = new PropertyElement() { Foreground = "Black", Name = "Anestesista", Value = Nomenclador1.Anestesista };
            Gastos = new PropertyElement() { Foreground = "Black", Name = "Gastos", Value = Nomenclador1.Gastos };
            CodAnterior = new PropertyElement() { Foreground = "Black", Name = "CodAnterior" , Value = Nomenclador1.CodAnterior};
            
            Color1 = "White";
            Color2 = "White";
            Color3 = "White";
            Color4 = "White";
            Color5 = "White";
            Color6 = "White";
            Color7 = "White";
            Color8 = "White";
            Color9 = "White";
            Color10 = "White";
            Color11 = "White";

            Colores = new List<string>();

            Colores.Add(Color1);
            Colores.Add(Color2);
            Colores.Add(Color3);
            Colores.Add(Color4);
            Colores.Add(Color5);
            Colores.Add(Color6);
            Colores.Add(Color7);
            Colores.Add(Color8);
            Colores.Add(Color9);
           
            ValidationList = new List<PropertyElement>();
            ListaEltoColoresInt = new List<PropertyElement>();
            ListaEltoNull = new List<PropertyElement>();

            CodigoNomP.Validations.Add(ValidationType.Requerido);
            Descripcion.Validations.Add(ValidationType.Requerido);
            Letra.Validations.Add(ValidationType.Requerido);
            Galeno.Validations.Add(ValidationType.Requerido);
            Especialista.Validations.Add(ValidationType.Requerido);
            Ayudante1.Validations.Add(ValidationType.Requerido);
            Ayudante2.Validations.Add(ValidationType.Requerido);
            Ayudante3.Validations.Add(ValidationType.Requerido);
            Anestesista.Validations.Add(ValidationType.Requerido);
            Gastos.Validations.Add(ValidationType.Requerido);
            CodAnterior.Validations.Add(ValidationType.Requerido);


        //** Controla q sean Numericos los campos requeridos
            ListaEltoColoresInt.Add(CodigoNomP);
            ListaEltoColoresInt.Add(Ayudante1);
            ListaEltoColoresInt.Add(Ayudante2);
            ListaEltoColoresInt.Add(Ayudante3);
            ListaEltoColoresInt.Add(Gastos);

        //** Lista que intruduce 0.00 en los campos vacios
            ListaEltoNull.Add(Letra);
            ListaEltoNull.Add(Galeno);
            ListaEltoNull.Add(Especialista);
            ListaEltoNull.Add(Ayudante1);
            ListaEltoNull.Add(Ayudante2);
            ListaEltoNull.Add(Ayudante3);
            ListaEltoNull.Add(Anestesista);
            ListaEltoNull.Add(Gastos);
            ListaEltoNull.Add(CodAnterior);

        //** Valida Eltos
            ValidationList.Add(CodigoNomP);
            ValidationList.Add(Descripcion);
            ValidationList.Add(Letra);
            ValidationList.Add(Galeno);
            ValidationList.Add(Especialista);
            ValidationList.Add(Ayudante1);
            ValidationList.Add(Ayudante2);
            ValidationList.Add(Ayudante3);
            ValidationList.Add(Anestesista);
            ValidationList.Add(Gastos);
            ValidationList.Add(CodAnterior);
            
        }
        public List<string> ListaColor { get; set; }
        public List<PropertyElement> ListaEltoColoresInt { get; set; }
        
       
        public bool Validar(List<PropertyElement> listaElementos, ref List<String> Color)
        {
            PropertyValidator Validador = new PropertyValidator();
            int longitud = listaElementos.Count;
            bool flag = true;
            int i = 0;
            while ( i < longitud) 
            {
               if (string.IsNullOrEmpty(listaElementos[i].Value))
              {
                  Color[i] = "Red";
                  flag = false;
              }
                  else 
                  {
                  try {
                      var val = Convert.ToDecimal(listaElementos[i].Value);
                  }
                  catch
                  {
                  Color[i] = "Red";
                  flag = false;
                  }
                  }
                i = i + 1;
              }
          return flag;
        }
        public List<PropertyElement> ValidarNull(List<PropertyElement> listaElementos, ref List<String> Color)
        {
            PropertyValidator Validador = new PropertyValidator();
            int longitud = listaElementos.Count;
            
            int i = 0;
            while (i < longitud)
            {
                if (string.IsNullOrEmpty(listaElementos[i].Value))
                {
                    listaElementos[i].Value = "0.00";
                   
                }
                else
                    i = i + 1;
            }
            return listaElementos;
        }
        



        #region GuardarMadificaciones
        private bool CanExecute()
        {
            return true;
        }
        private DelegateCommand guardarMoficacion;
        public ICommand GuardarMoficacion
        {
            get
            {
                if (guardarMoficacion == null)
                {
                    guardarMoficacion = new DelegateCommand(GuardarNomenclador, CanExecute);
                }
                return guardarMoficacion;
            }
        }

        private void GuardarNomenclador()
        {
            bool validColor = true;
            List<PropertyElement> validNull;
            validColor = Validar(ListaEltoColoresInt, ref Colores);
            validNull = ValidarNull(ListaEltoNull, ref Colores);

          
            int largo = Colores.Count;
                Color1 = Colores[0];
                Color2 = Colores[1];
                Color3 = Colores[2];
                Color4 = Colores[3];
                Color5 = Colores[4];
                Color6 = Colores[5];
                Color7 = Colores[6];
                Color8 = Colores[7];
                Color9 = Colores[8];


        
            {
                if (validColor)
                {

                    //0 ListaEltoNull.Add(Letra);
                    //1 ListaEltoNull.Add(Galeno);
                    //2 ListaEltoNull.Add(Especialista);
                    //3 ListaEltoNull.Add(Ayudante1);
                    //4 ListaEltoNull.Add(Ayudante2);
                    //5 ListaEltoNull.Add(Ayudante3);
                    //6 ListaEltoNull.Add(Anestesista);
                    //7 ListaEltoNull.Add(Gastos);
                    //8 ListaEltoNull.Add(CodAnterior);
                    NomenAux = new NomencladorDTO();
                    NomenAux.IdNomenclador = Nomenclador1.IdNomenclador;
                    NomenAux.CodigoNom = CodigoNomP.Value;
                    NomenAux.Anestesista = validNull[6].Value;
                    NomenAux.Descripcion = Descripcion.Value;
                    NomenAux.Letra = validNull[0].Value;
                    NomenAux.Galeno = validNull[1].Value;
                    NomenAux.Especialista = validNull[2].Value;
                    NomenAux.Ayudante1 = validNull[3].Value;
                    NomenAux.Ayudante2 = validNull[4].Value;
                    NomenAux.Ayudante3 = validNull[5].Value;
                    NomenAux.CodAnterior = validNull[8].Value;
                    NomenAux.Gastos = validNull[7].Value;
                   WS.Nomenclador_Modificar(NomenAux);

                   // if (cacho > (-1))
                    //{
                        Instancias.ModalDialog.ShowHandlerDialog(String.Format("Exitos en Guardar la practica"));
                   // }
                  //  else
                   // {
                      
                  //  }
                }
                else
                {
                    Instancias.ModalDialog.ShowHandlerDialog(String.Format("Error en Ingreso de Datos"));
                }
            }

        }
        #endregion 

    }
}


